package com.yunpeng.aidevice.biz.service;

import com.alibaba.fastjson.JSONObject;
import com.yunpeng.common.dto.Result;
import com.yunpeng.aidevice.common.dto.query.DeviceQueryDTO;
import com.yunpeng.aidevice.common.dto.save.DeviceSaveDTO;
import com.yunpeng.common.paging.PagingQueryDTO;
import com.yunpeng.aidevice.common.vo.SimpleEntityVO;
import com.yunpeng.aidevice.common.vo.device.DeviceAppDetailVO;
import com.yunpeng.aidevice.common.vo.device.DeviceDetailVO;

import java.time.LocalDateTime;
import java.util.List;

/**
 * IDeviceBizService 设备业务服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-27
 */
public interface IDeviceBizService {
    /**
     * 设备商户端列表
     *
     * @param deviceQueryDTO
     * @return
     */
    Result<PagingQueryDTO> queryDeviceList4Merchant(DeviceQueryDTO deviceQueryDTO);

    /**
     * 新增设备
     *
     * @param deviceSaveDTO 设备信息
     * @param operatorCode  操作人代码
     * @return
     */
    Result<Void> addNewDevice(DeviceSaveDTO deviceSaveDTO, String operatorCode);

    /**
     * 设备详情
     *
     * @param deviceCode   设备代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Result<DeviceDetailVO> deviceDetail(String deviceCode, String merchantCode, String tenantCode);

    /**
     * 更新设备信息
     *
     * @param deviceSaveDTO 设备信息
     * @param operatorCode  操作人代码
     * @return
     */
    Result<Void> updateDevice(DeviceSaveDTO deviceSaveDTO, String operatorCode);

    /**
     * 启用设备
     *
     * @param deviceCode   设备代码
     * @param operatorCode 操作人代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Result<Void> enableDevice(String deviceCode, String operatorCode, String merchantCode, String tenantCode);

    /**
     * 禁用设备
     *
     * @param deviceCode   设备代码
     * @param operatorCode 操作人代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Result<Void> disableDevice(String deviceCode, String operatorCode, String merchantCode, String tenantCode);

    /**
     * 删除设备
     *
     * @param deviceCode   设备代码
     * @param merchantCode 商户代码
     * @param tenantCode   租户代码
     * @return
     */
    Result<Void> deleteDevice(String deviceCode, String merchantCode, String tenantCode);

    /**
     * 设备下拉数据
     *
     * @param merchantCode
     * @param tenantCod
     * @return
     */
    Result<List<SimpleEntityVO>> dropDownList(String merchantCode, String tenantCod);

    /**
     * 获取设备详情（提供给app配置使用）
     *
     * @param deviceId
     * @return
     */
    Result<DeviceAppDetailVO> getDetail4App(String deviceId);

    /**
     * 获取设备app更新信息
     * @param deviceId
     * @return
     */
    Result<JSONObject> getDeviceUpdateInfo(String deviceId);

    /**
     * 上传记录
     *
     * @param personnelId
     * @param deviceId
     * @param time
     * @param temperature
     * @param fileUrl
     * @return
     */
    Boolean saveRecordResult(String personnelId, String deviceId, LocalDateTime time, Double temperature, String fileUrl);

    /**
     *  验证设备存在
     *
     *
     * @param deviceId 设备id
     * @return
     */
    Boolean checkExistDeviceId(String deviceId);
}
